﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once
#include "GcmpModelInterface.h"
#include "IDbObject.h"

namespace gcmp
{
    class IElement;
    /// \brief 实例定位参数与族参数更新接口类
    ///
    /// 若需要定位参数与族参数之间进行数据同步更新，则需要从这个接口继承，实现同步数据逻辑。
    class GCMP_MODEL_INTERFACE_EXPORT IInstanceFamilyParametersUpdater : public IDbObject
    {
        DEFINE_CAST_DERIVED(gcmp::IInstanceFamilyParametersUpdater, gcmp::IDbObject)
    public:
        /// \brief 克隆InstanceFamily参数同步对象
        /// \return 参数同步对象
        virtual OwnerPtr<IInstanceFamilyParametersUpdater> Clone() const = 0;

        /// \brief 把族参数数据同步到定位参数中
        /// \param pElement 对象指针
        /// \return 返回true表示成功同步数据，否则表示失败
        virtual bool UpdateFamilyParametersToPositionParameters(IElement *pElement) = 0;

        /// \brief 把定位参数数据同步到族参数中
        /// \param pElement 对象指针
        /// \return 返回true表示成功同步数据，否则表示失败
        virtual bool UpdatePositionParametersToFamilyParameters(IElement *pElement) = 0;
    };
}


